Ders 16 - Ajax Security > JSON Injection
AJAX Security ünitesinin beşinci dersi olan JSON Injection(JavaScript Object Notation Enjeksiyonu) dersinde bir önceki derslerle aynı mantıkda kod enjeksiyonu yapılacaktır. Böylelikle ucuza uçak bileti almış olacağız.

Dersin Hedefi

Boston'dan Seattle'a seyahet edecek bir müşterisiniz. Bi' kez havalimanının 3 karakterli kodunu metin kutularına girdiniz mi AJAX talebi bilet ücretini sorgulamak için çalıştırılacaktır(Boston'ın kodu BOS, Seattle'ınki ise SEA'dır). Fark edeceksiniz ki biri aktarmasız yani pahalı olan, diğeri aktarmalı yani ucuz olan mevcut iki uçuş seçeneği vardır. Hedefiniz pahalı olan uçuş biletini daha ucuza almaktır.

Açıklamalar

Javascript Object Notation(JSON) basit, ama verimli bir hafifsıklet veri değiştokuş formatıdır. JSON yaygın bir şekilde AJAX içerisinde kullanılmaktadır. JSON metni tıpkı XML metni gibi herhangi bir programlama dili tarafından veri formatında okunabilir, parse edilebilir(ayrıştırılabilir) ve kullanılabilir. JSON, XML'in alternatifidir. JSON ile XML'in farkı JSON'ın XML'den daha hızlı ve kolay oluşudur. Bu yüzden XML'e göre JSON, programcılar tarafından daha fazla rağbet görmektedir. JSON ile XML'in en büyük farkı şudur: XML, bir XML parser tarafından ayrıştırılabiliyorken JSON standard bir javascript fonksiyonu ile ayrıştırılabilmektedir. Bunların yanısıra olumsuz bir ortak yönlerinden bahsedecek olursak XML gibi JSON da enjeksiyon saldırılarına karşı meyillidir. Kötü niyetli bir saldırgan sunucudan gelen yanıtın önünü keserek enjeksiyon saldırısı yapabilir, yani yanıtın içeriğine bazı değerler girebilir ve işleyişi kendi menfaatine göre değiştirebilir. Bu derste bu kötü niyetli kişinin rolünü similasyonun senaryosu gereği biz alıyoruz ve pratikte sunucudan gelen yanıtın önünü kesip kod enjekte ederek saldırıda bulunuyoruz.

Dersin Çözümü

Önceki derslerde olduğu gibi yine sunucudan gelen yanıtın önünü kesip yanıtı manipule etmeniz gerekmektedir. Öncelikle WebScarab'ın Intercep sekmesine tıklayın ve Intercept Response kutucuğuna tick işareti koyun.





Ardından ilk metin kutusuna BOS, ikincisine ise SEA yazın.





AJAX talebi arkaplanda sunucuya gönderilecektir ve bu talebe karşı sunucudan bir yanıt gelecektir. Fakat WebScarab ile yanıtların önünü kes dediğimiz için yanıt bize, yani tarayıcı ekranına varmadan WebScarab tarafından tutulacaktır ve bir webscarab popup penceresi ekrana gelecektir. Bu pencerede aşağıdaki resimden de görebileceğiniz üzere popup penceresinin Raw sekmesine tıklanıldığında http header ve json kodları yer almaktadır. Bu bizim yanıtın içeriğini temsil eden kodlardır.





JSON kodları çok basit bir syntax'a, yani söz dizimine sahip olduğundan sanırım biletlerin uçuş fiyatlarını gösteren kısımları fark etmişsinizdir. $600 ve $300 yazan kısımlardan $600 kısmının değerini 600 dolardan küçük bir değer ile değiştirin. Ben 300 yazıyorum.





Ardından Accept Changes butonuna tıklayarak yanıtın önündeki barikatı kaldırın. Peşisıra gelecek olan diğer yanıt popup'larına da Accept Changes deyin. Bu işlemlerin akabinde ders ekranına radio button'lara sahip iki tane bilet seçeneği yansıyacaktır.





Resimdeki gibi ucuzlattığımız pahalı bileti, yani no stop'suz(aktarmasız) bileti seçin ve Submit butonuna tıklayın. Böylece dersi tamamlamış olursunuz.

Sonuç
Tıpkı önceki derslerde yaptığımız gibi sunucudan gelen yanıtı kesip kodu değiştirerek, yani diğer tabirle enjeksiyon yaparak ucuza uçak biletini almış olduk. Bu ve bundan önce buna benzeyen örneklerde işlenen temel nokta güvenlik önleminin istemci tarafından sağlanamayacağı gerçeğidir. İstemci ekranından nesne eksiltip arttırarak erişim kısıtlaması sağlanamayacağı gibi rakam eksiltip arttırarak da fiyat güvenliği sağlanamaz. Bu derste gördüğümüz üzere pahalı bileti ucuza kaptırmamak için sunucu tarafındaki web programlama dili ile bazı kontroller sağlanmalıdır. Mesela eğer istemci pahalı bileti satın almayı seçiyorsa veritabanına kaydolacak fiyat rakamı istemciden gelen rakam değil de veritabanında hal-i hazırda varolan, daha önce hazırlanmış bir fiyat tablosundaki fiyat kaydı olmalıdır. Böylece güvenlik bir nebze sağlanmış olur.

Yararlanılan Kaynaklar

Bu yazı 14.07.2015 tarihinde, saat 20:13:31'de yazılmıştır. 23.09.2015 tarihi ve 15:19:34 saatinde ise güncellenmiştir.
Yazar : Hasan Fatih ŞİMŞEK Görüntülenme Sayısı : 2142
Yorumlar
Henüz yorum girilmemiştir.
Yorum Ekle
*
* (E-posta adresiniz yayınlanmayacaktır.)
*
*

#Arşiv


#Giriş

ID :
Şifre :